/**
@file     	Host.h
@brief    	all kinds of Host
@author  	arvin
@version 	1.0   2012/12/14
*/

#ifndef CXX_HOST_H
#define CXX_HOST_H
#include "ProductDef.h"

class Host
{
public:

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~Host() = 0;

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation() = 0;

	/**
	* GetManufacturer
	*
	* @param VOID
	* @return MANUFACTURER_TYPE
	*/
	MANUFACTURER_TYPE GetManufacturer();

protected:
	/**
	* Construction
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	Host(MANUFACTURER_TYPE eManufacturer);

	/**
	* SetManufacturer
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	VOID SetManufacturer(MANUFACTURER_TYPE eManufacturer);
private:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	Host();

	/**
	* Copy Construction
	*
	* @param const Host& cHost
	* @return
	*/
	Host(const Host& cHost);

	/**
	* Assignment
	*
	* @param const Host& cHost
	* @return Host&
	*/
	Host& operator=(const Host& cHost);

public:
protected:
private:
	MANUFACTURER_TYPE m_eManufacturer;
};

class DELLHost : public Host
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	DELLHost();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~DELLHost();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const DELLHost& cASUSHost
	* @return
	*/
	DELLHost(const DELLHost& cDELLHost);

	/**
	* Assignment
	*
	* @param const DELLHost& cASUSHost
	* @return DELLHost&
	*/
	DELLHost& operator=(const DELLHost& cDELLHost);

public:
protected:
private:
};

class ASUSHost : public Host
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	ASUSHost();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~ASUSHost();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const ASUSHost& cASUSHost
	* @return
	*/
	ASUSHost(const ASUSHost& cASUSHost);

	/**
	* Assignment
	*
	* @param const ASUSHost& cASUSHost
	* @return ASUSHost&
	*/
	ASUSHost& operator=(const ASUSHost& cASUSHost);

public:
protected:
private:
};

class HPHost : public Host
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	HPHost();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~HPHost();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const HPHost& cHPHost
	* @return
	*/
	HPHost(const HPHost& cHPHost);

	/**
	* Assignment
	*
	* @param const HPHost& cHPHost
	* @return HPHost&
	*/
	HPHost& operator=(const HPHost& cHPHost);

public:
protected:
private:
};


#endif	/* >>CXX_HOST_H<< */
/* EOF */